package com.envper.common.util;

import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;

import java.util.UUID;

public class PasswordUtils {

    public static boolean matches(CharSequence rawPassword, String encodedPassword) {
        // 1.首先判断这两个参数到底有没有值,数据库中的最终密码是不是32位
        if(StringUtils.hasLength(rawPassword) && StringUtils.hasLength(encodedPassword)
                && encodedPassword.length() == 65){
            // a.首先从最终的密码中得到盐值
            String salt = getSalt(encodedPassword);
            // b.使用之前加密的方法，生成最终的密码格式（待验证）
            String checkPassword = encrypt(rawPassword.toString(), salt);
            return checkPassword.equals(encodedPassword);
        }
        return false;
    }

    public static String encode(String rawPassword) {
        // 1.生成盐值
        String salt = UUID.randomUUID().toString().replace("-", "");
        // 2.返回加密后的密码
        return encrypt(rawPassword.toString(), salt);
    }

    public static String encrypt(String password, String salt){
        // 1.生成一个加密后的密码
        String md5password = DigestUtils.md5DigestAsHex((salt + password).getBytes());
        // 2.利用盐值和密码进行拼接
        return salt + "$" +md5password;
    }

    public static String getSalt(String password) {
        return password.split("\\$")[0];
    }
}
